<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> 原型链 </title>
</head>
<body>
    
</body>
</html>
<script>
//2021-07-24-早 
//有些失望时不可避免的，但是大部分的失望，都是因为高估了自己。

// 原型链 //原型链是一个由对象组成的有限对象链由于实现继承和共享属性。

var foo = {    
  x: 10,
  y: 20
};
console.log(foo) // {x: 10, y: 20}x: 10y: 20__proto__: Object
// 原型对象也是普通的对象，并且也有可能有自己的原型，如果一个原型对象的原型不为null的话，我们就称之为原型链（prototype chain）。

//思考如下 
/*
    想象一个这样的情况 两个对象大部分都一样 只有小部分不一样 很明显
    在一个好的设计模式中 我们则会需要重用那部分相同的 而不是在每个对象总定义那些相同的方法或者属性   
    在基于类[calss-cased]的系统中 这些重用的代码被称之为继承 相同的部分放入class A，
    然后calss B和class C从A中去继承 并且可以声明拥有各自的东西 

   //原型继承 ?
   ECMAScript没有类的概念。
   但是，重用[reuse]这个理念没什么不同（某些方面，甚至比class-更加灵活），可以由prototype chain原型链来实现。
   这种继承被称为delegation based inheritance-基于继承的委托，或者更通俗一些，叫做原型继承。 
*/

var a = {
  x: 10,
  calculate: function (z) {
    return this.x + this.y + z
  }
};
 
var b = {
  y: 20,
  __proto__: a
};
 
var c = {
  y: 30,
  __proto__: a
};
 
// 调用继承过来的方法
b.calculate(30); // 60
c.calculate(40); // 80

</script>